Jak dostat radky do jednoho

Otázka od: Delphin

6. 12. 2002 17:36

Mam zacatecnicky dotaz na optimalizaci dotazu. Kdyz se jedna jenom o dva
joiny, tak to jeste jede, ale v realu jich tam bude cca 10 a to uz trva moc
dlouho.

select ID,X.Pocet as XPocet,Y.Pocet as YPocet
from A
left outer join (select ID,sum(Pocet) where Typ='X' from B group by ID) X on
X.ID=A.ID
left outer join (select ID,sum(Pocet) where Typ='Y' from B group by ID) Y on
Y.ID=A.ID

Kdyz pouziju nasledujici poddotaz, tak to je podstatne rychlejsi

select ID,Typ,sum(Pocet) from B group by ID,Typ

akorat nevim, jak dostanu tech nekolik radku do jednoho.

Chci se tedy zeptat, jestli se da dostat nekolik radku do z poddotazu do
jednoho, pripadne jak jinak se to da vyresit.

Jedna se o MSSQL.

Diky Delphin

Odpovedá: Ing. Pavel Žilinec

9. 12. 2002 7:27

Lze pouzit neco takovehoto (pokud znas presne sloupce, tak je to pak
optimalni). Podle potreby muzes menit tu agregacni fci. Mam to
vyzkousene a kupodivu je CASE docela rychly

select ID,
    PocetX = max(case Typ when 'X' then b.Pocet else 0 end),
    PocetY = max(case Typ when 'Y' then b.Pocet else 0 end),
  from A
  left outer join B on a.ID = b.ID
  group by a.ID


--------
ing. Pavel Zilinec
MailTo:zilinec@email.cz

Prog-Soft s.r.o. Plzen
Informacni system pro vyrobce
a distributory napoju

D> Mam zacatecnicky dotaz na optimalizaci dotazu. Kdyz se jedna jenom o dva
D> joiny, tak to jeste jede, ale v realu jich tam bude cca 10 a to uz trva moc
D> dlouho.

D> select ID,X.Pocet as XPocet,Y.Pocet as YPocet
D> from A
D> left outer join (select ID,sum(Pocet) where Typ='X' from B group by ID) X on
D> X.ID=A.ID
D> left outer join (select ID,sum(Pocet) where Typ='Y' from B group by ID) Y on
D> Y.ID=A.ID

D> Kdyz pouziju nasledujici poddotaz, tak to je podstatne rychlejsi

D> select ID,Typ,sum(Pocet) from B group by ID,Typ

D> akorat nevim, jak dostanu tech nekolik radku do jednoho.

D> Chci se tedy zeptat, jestli se da dostat nekolik radku do z poddotazu do
D> jednoho, pripadne jak jinak se to da vyresit.

D> Jedna se o MSSQL.

D> Diky Delphin

Odpovedá: Lstiburek Pavel

9. 12. 2002 13:36

Neni mi jasne co presne chces, ale napr.:

select ID,
       Sum(CASE WHEB TYP = 'Y' THEN Pocet ELSE 0 END) As Ypocet,
       Sum(CASE WHEB TYP = 'X' THEN Pocet ELSE 0 END) As Xpocet
  from B
  group by ID


Pavel
 

-----Original Message-----
From: Delphin [mailto:delphin@post.cz]
Sent: Friday, December 06, 2002 4:55 PM
To: delphi-l@clexpert.cz
Subject: Jak dostat radky do jednoho


Mam zacatecnicky dotaz na optimalizaci dotazu. Kdyz se jedna jenom o dva
joiny, tak to jeste jede, ale v realu jich tam bude cca 10 a to uz trva moc
dlouho.

select ID,X.Pocet as XPocet,Y.Pocet as YPocet
from A
left outer join (select ID,sum(Pocet) where Typ='X' from B group by ID) X on
X.ID=A.ID
left outer join (select ID,sum(Pocet) where Typ='Y' from B group by ID) Y on
Y.ID=A.ID

Kdyz pouziju nasledujici poddotaz, tak to je podstatne rychlejsi

select ID,Typ,sum(Pocet) from B group by ID,Typ

akorat nevim, jak dostanu tech nekolik radku do jednoho.

Chci se tedy zeptat, jestli se da dostat nekolik radku do z poddotazu do
jednoho, pripadne jak jinak se to da vyresit.

Jedna se o MSSQL.

Diky Delphin